home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / cucd / online / fidonetts / fsc-0044.002 < prev    next >
Text File  |  1990-10-07  |  36KB  |  680 lines

  1. Document: FSC-0044
  2. Version:  002
  3. Date:     07-Oct-1990
  4.  
  5.  
  6.  
  7.  
  8.         An improved method of duplicate message detection and prevention
  9.                                   Jack Decker
  10.                                 1:154/8@Fidonet    
  11.  
  12.  
  13.  
  14.  
  15. Status of this document:
  16.  
  17.      This FSC suggests a proposed protocol for the FidoNet(r) community,
  18.      and requests discussion and suggestions for improvements.
  19.      Distribution of this document is subject to the restrictions stated
  20.      in the copyright paragraph below.
  21.  
  22.      Fido and FidoNet are registered marks of Tom Jennings and Fido
  23.      Software.
  24.  
  25.  
  26. Purpose:
  27.  
  28. The purpose of this document is to present a proposal for an improved method
  29. of duplicate message detection and prevention, that could eventually replace
  30. the existing PATH and SEEN-BY lines currently used within Fidonet.  The
  31. principal advantages of this method over previous schemes is that it is fully
  32. Domain-, Zone-, and Point-aware, and that it adds far fewer bytes to a message
  33. than the current combination of SEEN-BY and PATH lines.  It can also be run in
  34. parallel with existing SEEN-BY and PATH lines for an indefinite period, thus
  35. allowing a "transition period" of as long as is necessary for software to be
  36. converted.
  37.  
  38. Copyright:
  39.  
  40. This document is Copyright 1990 by Jack Decker.  However, permission is
  41. granted for any and all non-commercial use, providing the contents of this
  42. document are not altered in any way.  Also, permission is expressly granted
  43. for any use by developers of software primarily intended to be used in the
  44. Fidonet amateur communications network, or in any similar amateur
  45. communications network that primarily uses Fidonet technology and protocols,
  46. whether that software is commercial or not.
  47.  
  48. Comments on this proposal, and suggestions for improvement are welcomed by the
  49. author.  In particular, suggestions on how this proposal might be reworded to
  50. make the meaning clearer are especially welcome.
  51.  
  52.  
  53. A. Definition:
  54.  
  55. In this document the characters ^A (caret and capital A) will be used to
  56. represent a 0x01 (SOH) byte.  It will be most commonly used in reference to
  57. the "^APTH line", which will be a line that begins with a 0x01 byte
  58. immediately followed by the letters "PTH" (and then by additional data as
  59. specified below).
  60.  
  61.  
  62. B. Why a new method of duplicate message detection is needed:
  63.  
  64. Most of the methods of duplicate message detection currently used in Fidonet
  65. echomail processing operate by trying to find some distinguishing
  66. characteristic of an echomail message (whether it be something deliberately
  67. included in the message, such as an EID, MSGID, etc. type of "kludge line", or
  68. something which is contained in all echomail messages, such as the message
  69. header).  Typically, either the item being used for duplicate detection itself
  70. or a checksum of that item is then saved in a data file, and if another item
  71. comes in with that same distinguishing characteristic, the message is
  72. considered to be a duplicate message.  The data files used to store
  73. previously-seen message data can occupy a significant amount of disk space if
  74. many conferences are carried on a system.
  75.  
  76. Unfortunately, all such schemes seem to suffer from the drawback that under
  77. the proper circumstances, messages that are not duplicates of each other may
  78. be created with identifying characteristics that are similar enough to be
  79. falsely recognized as duplicates.  The circumstances under which this can
  80. happen may differ from method to method, but none are totally foolproof.
  81. Thus, it's possible that messages may be deleted as duplicates even though in
  82. reality they are not duplicates, but rather they are simply messages that
  83. contain data that make them appear to be duplicates.
  84.  
  85. The most common cause of duplicate messages is improper echomail topology
  86. (also known as the infamous "dupe loop").  While there are certainly other
  87. ways that duplicates can be generated, improper topology is far and away the
  88. leading cause.  Further, many of the current duplicate elimination schemes
  89. will NOT catch most of the duplicates that are NOT generated as a result of
  90. improper topology (which is why duplicate messages are seen occasionally, even
  91. though duplicate message detection schemes are currently in use).
  92.  
  93. Unfortunately, if a duplicate killer is to be effective, it must store the
  94. identifying characteristics for the last several thousand messages that have
  95. passed through a particular system.  This not only uses up disk storage space,
  96. it consumes extra processing time during echomail processing, since each new
  97. arriving message must be compared to the data list in the attempt to determine
  98. if it is, indeed, a duplicate.
  99.  
  100. A better approach would be to store within a message itself data that
  101. identifies it as having already been received by a particular system, before
  102. sending it on to another system.  Then, if the same message came back to a
  103. given system in a "dupe loop", it would be possible to positively identify it
  104. as one that has already been seen on that particular system.  And, since the
  105. data necessary to identify the message as a duplicate is stored within the
  106. message itself, it is possible to use this method without the necessity of
  107. storing great amounts of data on previously-seen messages (in many
  108. implementations this alone would save 10K or more of disk space per conference
  109. carried!).
  110.  
  111. Were it not for the fact that the PATH line present in most echomail messages
  112. does not contain Zone or Point information, we could use it for that purpose.
  113. However, since it does not contain that information, it cannot and should not
  114. be used in that manner.  Another drawback of the PATH line is that because it
  115. is physically located at the end of a message (after the SEEN-BY lines), if
  116. only the last part of a message is scrambled or deleted, the PATH line
  117. information will be lost.
  118.  
  119.  
  120. C. Proposal:
  121.  
  122. 1) A new type of kludge line (commonly known within FIDONET as an "IFNA kludge
  123. line"), which combines certain characteristics of the existing PATH and
  124. SEEN-BY lines, will be placed into each echomail message.  This line, known as
  125. the ^APTH line, will be placed at the TOP of the message (not necessarily the
  126. first line, but prior to the body of the message text).  IMPORTANT: Support
  127. for the existing PATH and SEEN-BY lines will be retained as long as is
  128. necessary to accommodate everyone in Fidonet, but eventually the ^APTH line
  129. could possibly replace both the current PATH and SEEN-BY lines.
  130.  
  131. 2) The ^APTH line will contain full five-dimensional addressing
  132. (Zone:Net/Node.Point@Domain), BUT elements that are the same as the previous
  133. entry in the line need not be repeated (except when a message passes to a new
  134. domain, in which case the full address of the first node in the new domain
  135. shall be given).  When the "point" portion of an address stands alone, it
  136. shall be preceded by at least a "." character (to distinguish it from a node
  137. address).
  138.  
  139. 3) If a system is importing messages and finds a message with its own address
  140. already in the ^APTH line, it will discard the message (unless that address is
  141. in the very last position on the line... this allows for the odd situation
  142. where a point or another task on the same system has already inserted the
  143. system's address in the ^APTH line, or where it is desirable to process the
  144. same message a second time).
  145.  
  146. 4) One (and only one) modifier character may appear just AFTER any address on
  147. the ^APTH line.  When using the ^APTH for duplicate message checking only, you
  148. may just skip past any such address, unless it's your own address (see
  149. examples later in this document).  In that case, strip the address and the
  150. modifier character (in other words, if you see your own address but it's
  151. immediately followed by a modifier character, remove that address, add yours
  152. to the end of the ^APTH line, and toss the message anyway).  The reason for
  153. doing this is to allow the design of an echomail processor that doesn't rely
  154. on SEEN-BY's.  Such a processor could append a modifier character (such as a
  155. "!") to an address, in order to indicate that "this message hasn't really
  156. passed through this node, but don't send it back there" (which would be the
  157. equivalent of a SEEN-BY statement for that node, indicating that this message
  158. has already been sent to that node).  Thus the ^APTH line could eventually
  159. take the place of SEEN-BY lines, but you could still have a "fully coupled"
  160. triangular or rectangular topology.  In this case, you'd add the nodes that
  161. are part of that fully coupled topology to the ^APTH line BEFORE sending the
  162. message to them, but with the special character after the address.  The
  163. receiver would know that the message didn't really pass through that node yet,
  164. but it should NOT send it to that node under any circumstances.
  165.  
  166. (Please note that during the initial design of software to create ^APTH lines,
  167. you would not have to worry about generating the special case with the
  168. trailing modifier characters, you'd just have to be able to handle them as
  169. shown in the examples below if you came across one).
  170.  
  171.  
  172. D. Specifications and examples:
  173.  
  174. The general specifications for a ^APTH line, and a general outline of how an
  175. incoming message might be processed follows.
  176.  
  177. A valid ^APTH line will contain at a minimum the string ^APTH followed by a
  178. single space character and the network address of the system that created the
  179. ^APTH line, in Zone:Net/Node[.Point]@Domain format, where ^A is a 0x01 byte
  180. (SOH) and the point address is required only if the system is a point
  181. (specifically, a system that is NOT a point should not use .0).
  182.  
  183. Once again, the FIRST Fidonet-technology address specified in a ^APTH line is
  184. expected to contain, at a minimum, Zone, Net, and Node numbers, and a valid
  185. Domain string preceded by the "@" character.  If any of these are missing from
  186. the FIRST address, the line should be considered defective (exception: See
  187. Note 5, "Messages sent to/from non-Fidonet-technology networks").  It will be
  188. left to the discretion of the software author as to how to handle a message
  189. with a defective ^APTH line.
  190.  
  191. Subsequent addresses in the ^APTH line are delimited by spaces and should
  192. contain only that information that is different from the previous entry on the
  193. line, except when a message passes into a new domain (in which case the full
  194. address of the first system in the new domain shall be given) or when a
  195. bossnode receives a message from a point, in which case the bossnode should
  196. append its node number only.  Specific examples follow:
  197.  
  198.      a. If the Domain and Zone are the same as the previous address, but the
  199.         net is different, then only Net/Node[.Point] should be used.
  200.  
  201.      b. If the Domain, Zone and Net are the same as the previous address, but
  202.         the node is different, then only Node[.Point] should be used.
  203.  
  204.      c. If the Domain, Zone, Net, and Node are the same as the previous
  205.         address, but the point is different, then only .Point should be used.
  206.         Note that in this case, the period is included.
  207.  
  208.      d. If the Domain, Zone, Net, and Node are the same as the previous
  209.         address, but the previous address contains a point specifier and the
  210.         receiving system is not a point (i.e., it IS the bossnode), then only
  211.         Node should be used.  .0 (point zero) might also be a valid entry in
  212.         this case, but only if the bossnode consistently identifies itself to
  213.         other systems using a full five-dimensional address.  For example, a
  214.         message that originated on 1:234/5.6@Fidonet and went from there to
  215.         1:234/5 would contain a ^APTH line in this format:
  216.                         ^APTH 1:234/5.6@Fidonet 5
  217.         If the bossnode is also considered to be point zero, then
  218.                         ^APTH 1:234/5.6@Fidonet .0
  219.         Would be equally valid.
  220.  
  221. In the case of a "fully connected" topology, nodes may be added to the ^APTH
  222. line even though a message has not actually passed through those nodes, to
  223. prevent the message from being sent to those nodes.  Such nodes should have an
  224. exclamation point character ("!") appended to the end of the entry,
  225. immediately following the node or point number.  These nodes should be added
  226. to the very end of a new or existing ^APTH line, after the address of the node
  227. which added them.
  228.  
  229. For example, suppose that 157/200, 154/9, and 228/6 were in a "fully
  230. connected" topology.  When a message was received by 157/200 and then sent to
  231. 154/9 and 228/6, the ^APTH line might look something like this:
  232.  
  233.      ^APTH: 3:711/431.5@Fidonet 431 403 1:124/4210 4115 157/200 154/9! 228/6! 
  234.  
  235. When a message arrives on one of the nodes indicated by the exclamation point,
  236. the exclamation point entry should be removed, and the node should add itself
  237. to the end of the line in the normal manner.  For example, after the message
  238. containing the above ^APTH line were received at 154/9, it would be modified
  239. to read:
  240.  
  241.      ^APTH: 3:711/431.5@Fidonet 431 403 1:124/4210 4115 157/200 228/6! 154/9 
  242.  
  243. Please note that at the time of this proposal, the exclamation point (!) is
  244. the ONLY "officially recognized" modifier character that can be expected to be
  245. appended to a ^APTH line address (except for the @Domain string, of course),
  246. however, the possibility remains that someone may figure out a good reason to
  247. use a different trailing character for some other (but similar) purpose, so I
  248. am allowing for that possibility by using the generic terminology "modifier
  249. character" rather than the more specific "exclamation point" throughout this
  250. document.
  251.  
  252. The ^APTH line must be terminated with a carriage return and/or linefeed (a
  253. carriage return followed by a linefeed is preferred, and should be used by all
  254. systems capable of generating a carriage return/linefeed combination).
  255.  
  256. There is no specified limit on the length of a ^APTH line.  Each message
  257. should contain only one ^APTH line, even if it extends beyond the typical 80
  258. column screen width.  The ^APTH line is primarily intended for use by the
  259. conference mail processing software, so primary consideration is being given
  260. to ease of processing the line, rather than making it easily human-readable
  261. (most software will not display kludge lines hidden behind a ^A character in
  262. any event).
  263.  
  264.  
  265. E. Pseudo-outline of message processing
  266.  
  267. Here is a suggested flow pseudo-outline showing one way that messages might be
  268. processed in a standalone program that runs between the import and export
  269. cycles of an existing conference mail processor such as ConfMail (this outline
  270. assumes that the standard Fido/Opus style *.msg files are used, though
  271. obviously that need not be the case):
  272.  
  273. 1.  Open *.msg file for input
  274.  
  275. 2.  Open temporary file for output
  276.  
  277. 3.  Copy header (first 190 bytes) from input to output file.  The following
  278.     operations begin immediately following this header.
  279.  
  280. 4.  Examine each line of input file (a line is delimited by a carriage return,
  281.     linefeed, or any combination thereof) for one of the following:
  282.  
  283.     a.  A blank line - Write to output and examine next line.
  284.  
  285.     b.  A line containing spaces only - Write to output and examine next line.
  286.  
  287.     c.  A line that begins with a 01 byte (SOH) - GoTo 5.
  288.  
  289.     d.  A line that does not meet any of the above specifications.
  290.  
  291.         I.   Create a line containing the string ^APTH followed by a single
  292.              space character and your network address, in
  293.              Zone:Net/Node[.Point]@Domain format, where ^A is a 0x01 byte
  294.              (SOH) and the point address is required only if you are a point
  295.              (specifically, a system that is NOT a point should not
  296.              necessarily use .0).  This line should be terminated with a
  297.              carriage return and/or linefeed (a carriage return followed by a
  298.              linefeed is preferred).
  299.  
  300.         II.  Write the line created in 4.d.I. to the output file.
  301.  
  302.         III. Write the line input in 4. to the output file.
  303.  
  304.         IV.  Goto 9.
  305.  
  306. 5.  If a line begins with a 0x01 (SOH) byte, examine the keyword immediately
  307.     following it.
  308.  
  309.     a.  If the keyword is NOT "PTH", write the entire line to output and
  310.         examine the next line (go back to 4).
  311.  
  312. 6.  If a line begins with ^APTH, examine each address in the line in turn.
  313.     Addresses start immediately following the characters "PTH " (note the
  314.     space).
  315.  
  316.     a.  The FIRST Fidonet-technology address (not counting any
  317.         pseudo-addresses consisting solely of "@Domain") is expected to
  318.         contain, at a minimum, Zone, Net, and Node numbers, and a valid Domain
  319.         string preceded by the "@" character.  If any of these are missing
  320.         from the FIRST Fidonet-technology address, the line should be
  321.         considered defective (See Note 5, "Messages sent to/from
  322.         non-Fidonet-technology networks", for information on "@Domain"
  323.         entries).  It will be left to the discretion of the software author as
  324.         to how to handle a message with a defective ^APTH line.
  325.  
  326.     b.  As each address is found, any Zone, Net, and Node numbers and Domain
  327.         strings found should be stored in temporary variables, to be used as
  328.         defaults for subsequent addresses when only a partial address is
  329.         given.  For example, the first address will contain a Zone number.
  330.         This should be stored in a temporary variable and used as the default
  331.         Zone for all subsequent addresses, until and unless another Zone
  332.         number is seen in the line, at which time that Zone number should be
  333.         stored in the temporary variable and used as the default Zone.
  334.  
  335.     c.  If an address is found that consists entirely of the "@" character
  336.         (as the first character of the address) followed by a domain name
  337.         (with or without punctuation), all temporary variables (defaults)
  338.         should be cleared (since any subsequent Fidonet-technology address
  339.         should contain full Zone:Net/Node[.Point]@Domain information).
  340.         Otherwise, such pseudo-addresses (consisting solely of @Domain) may be
  341.         ignored at systems that do not serve as inter-network gateways (such
  342.         entries are maintained only by inter-network "gateway" software).
  343.         However, they should not under any circumstances be removed from the
  344.         ^APTH line.
  345.  
  346. 7. As each address is found, it should be compared against the system's
  347.    address.  If a match is found:
  348.  
  349.      a. Check to make sure that the address is not a point address if the
  350.         system's address does not contain a point specifier.  If the system's
  351.         address is given without a point specifier, then it should not be
  352.         considered a match if ANY point address is found in the ^APTH line
  353.         address that is being compared (not even .0 - for example, if the
  354.         address 1:234/5.0 is seen in the ^APTH line, and 1:234/5 is the given
  355.         system address, then it is NOT a match).
  356.  
  357.      b. If the address does match exactly, check to see if a modifier
  358.         character (specifically the "!" character) immediately follows the
  359.         address.  If it does, then that address must be removed from the
  360.         line at that point.
  361.  
  362.         I.   When removing an address, please make sure that you do not change
  363.              the address of subsequent entries.  This may require modification
  364.              of the next entry on the line, if one exists.  For example,
  365.              suppose you had a "fully connected" topology where 1:157/200 sent
  366.              an echo to both 1:154/9 and 1:154/970. The ^APTH line might end
  367.              as follows:
  368.                              ..... 157/200 154/9! 970!
  369.              However, after modification of the ^APTH line, it should read:
  370.                              ..... 157/200 154/970! 9
  371.              You can see that if 154/9 were simply deleted without regard to
  372.              what follows on the line, the following (incorrect) line might
  373.              result:
  374.                              ..... 157/200 970! 154/9  (THIS IS INCORRECT)
  375.              The above is incorrect because 154/970 has been transformed into
  376.              157/970.
  377.  
  378.         II.  After removing an address followed by a modifier character,
  379.              continue to scan any remaining addresses in the ^APTH line in
  380.              case a match is found later in the line.  If no other matches
  381.              are found, proceed as if no match had been found.  Goto 8.
  382.  
  383.      c.  Check to see if the address is the last one on the line (not counting
  384.          addresses that have a modifier character immediately following
  385.          them).  If this address is followed only by the end of the line, or
  386.          ONLY by addresses that have a modifier trailing character, then
  387.          there is a very high probability that we have either inadvertently
  388.          or deliberately processed this message twice, and it is not really a
  389.          duplicate.  In this case, the original *.msg file should be left
  390.          untouched.
  391.  
  392.          I.   Close both the input and output files.
  393.  
  394.          II.  Delete the temporary output file.  END.
  395.  
  396.      d.  If a match is found, and it is not followed by a modifier
  397.          character, and it is not the last address on the ^APTH line, then the
  398.          message is a duplicate message and should be treated as such (either
  399.          by deleting it, or moving it to a "bad messages" area or the netmail
  400.          area).
  401.  
  402.          I.   Close both the input and output files.
  403.  
  404.          II.  Delete the temporary output file.
  405.  
  406.          III. Either delete or move the original .msg input file, as
  407.               appropriate.  END.
  408.  
  409. 8.  If the end of the ^APTH line is reached and a match has not been found,
  410.     then add the system's address to the end of the ^APTH line.  Then write
  411.     the modified ^APTH line to the output file.
  412.  
  413.          I.   If one or more addresses with an appended modifier character
  414.               (used within "fully-coupled" topologies) are to be added to the
  415.               ^APTH line, they should be added at the very end of the line,
  416.               after the address of the system currently processing the
  417.               message).
  418.  
  419. 9.  Copy the remainder of the input file to the output file.  Close both files.
  420.  
  421. 10. Delete the input file.
  422.  
  423. 11. Rename the temporary output filename to the old input filename.  END.
  424.  
  425. [End of outline]
  426.  
  427.  
  428. F.  Additional notes and clarifications:
  429.  
  430. Note 1:  In section 7.b.I. I mentioned the necessity of not simply deleting a
  431. node from the ^APTH line without checking to see if the next address in the
  432. ^APTH line needs to be modified.  This can easily be accomplished if TWO sets
  433. of temporary variables are kept, for the CURRENT and PREVIOUS Domain, Zone,
  434. Net, and Node information (Point addresses are NOT kept as defaults, thus
  435. there is no need to store Point information).  When reading the FIRST address
  436. in the ^APTH line, the Domain, Zone, Net, and Node information of that address
  437. would be stored in both the CURRENT and PREVIOUS variables.  Thereafter,
  438. whenever a new Domain string or  Zone, Net, or Node number is explicitly
  439. specified in a ^APTH line address, the new value(s) are stored in the CURRENT
  440. variables, but first the CURRENT values are moved to the PREVIOUS values.
  441.  
  442. To help visualize this, let's again suppose we have a ^APTH line that ends as
  443. follows (all of these addresses are in Fidonet Zone 1):
  444.  
  445.      ..... 157/200 154/9! 970!
  446.  
  447. Let's suppose that we are processing this message on 154/9, and will need to
  448. remove the 154/9! address.  When we encounter 157/200, our variables will be
  449. set as follows:
  450.  
  451.        Previous | Current
  452. Domain  Fidonet | Fidonet
  453. Zone      1     |    1
  454. Net       ?     |   157
  455. Node      ?     |   200
  456.  
  457. Now, when we read 154/9, our current values will be moved to the previous:
  458.  
  459.        Previous | Current
  460. Domain  Fidonet | Fidonet
  461. Zone      1     |    1
  462. Net      157    |   154
  463. Node     200    |    9
  464.  
  465. We now have the data we need to determine what needs to be added to the next
  466. address, after we delete 154/9.  In this case, we need only compare the
  467. Previous and Current addresses to determine which are UNEQUAL.  In this case,
  468. the Zone and Domain are the same, but the Net and Node are not.  So, if the
  469. following address lacks either the Net or Node, we'll have to add those.  Now
  470. we delete the 154/9! and look at the next address, 970.  At this point our
  471. variables will look like this:
  472.  
  473.        Previous | Current
  474. Domain  Fidonet | Fidonet
  475. Zone      1     |    1
  476. Net      154    |   154
  477. Node      9     |   970
  478.  
  479. Again, we compare to see which addresses are UNEQUAL.  In this case, only the
  480. NODE address is.  So we know we do NOT have to add the NODE address, nor do we
  481. have to add the Zone or Domain information (because they were not different on
  482. the first compare).  We only need add those address components which were
  483. unequal on the first compare, but equal on the second compare.  So, in this
  484. case, the Net address must be added to the next address in the ^APTH line,
  485. leaving as a result:
  486.  
  487.      ..... 157/200 154/970!
  488.  
  489. The current system address is then added back in at the end of the line, thus:
  490.  
  491.      ..... 157/200 154/970! 9
  492.  
  493. Note that whenever a new Domain is specified, the full address (four- or
  494. five-dimensional, depending on whether a point address is given) must be used.
  495. In other words, an address that includes an "@Domain" string but that does not
  496. also include the Zone, Net, and Node components of the address is considered
  497. invalid (it does not meet specifications).
  498.  
  499. Note 2:  In section 4.d it is suggested that, when a line that is neither
  500. blank nor a kludge line (that begins with a ^A character) is found, a ^APTH
  501. line be added at that point.  However, there are reports that under certain
  502. circumstances (particularly when messages are "forwarded" or "hurled"),
  503. certain software may insert a non-kludge line prior to previously-existing
  504. kludge lines in a message.  It should be recognized by software authors that a
  505. non-kludge line should NEVER be inserted in front of existing kludge lines
  506. located at the start of a message, if those kludge lines are still valid (and
  507. if they are NOT still valid, they should be removed.  When a message is
  508. forwarded or hurled, it is probably desirable to remove duplicate control
  509. information since what is essentially happening is that the text of a previous
  510. message is being inserted into a NEW message.  Since the message is new, the
  511. "old" duplicate control information is no longer valid).
  512.  
  513. Software authors that are implementing the ^APTH line in their software should
  514. never search beyond the first text line of a message for the ^APTH line,
  515. because if one is found later in the text, it is in all probability an old
  516. ^APTH line that was inadvertently copied over from another message, and is not
  517. relevant to the current message.
  518.  
  519.  
  520. Note 3:  This is an optional suggestion, for use during the transition period
  521. in which the ^APTH line has to coexist with more traditional PATH and SEEN-BY
  522. lines.  If ^APTH line checking is being used during the import phase of
  523. echomail processing in a conference mail processor, it might be a good idea to
  524. optionally check to make sure that all ^APTH line addresses that are in the
  525. system's home Zone and Domain (including those with an appended modifier
  526. character) have been properly included in the SEEN-BY lines, and to add any
  527. that have not been so included.  It should be obvious that ^APTH line
  528. addresses that are NOT in the system's home Zone and Domain should NOT be
  529. added to the SEEN-BY lines.  If this feature is implemented, it may be a good
  530. idea to give the sysop the ability to enable or disable it by means of a
  531. command line switch or a configuration file option.
  532.  
  533.  
  534. Note 4:  If nodes with trailing modifier characters are inserted into a ^APTH
  535. line for the purpose of indicating "SEEN-BY" nodes in a fully coupled
  536. topology, it is permissible (but not required) to include those nodes ONLY in
  537. the ^APTH lines of messages actually exported to the nodes participating in
  538. the circular topology.  In other words, it's permissible to add such nodes to
  539. the ^APTH lines of messages during the import cycle, in which case messages
  540. with ^APTH lines containing the added nodes would be exported to all nodes.
  541. However, it's also permissible to add those nodes to the ^APTH line during the
  542. export cycle, including them only in the ^APTH lines of the nodes that need to
  543. see them.  Please keep in mind that such nodes are added only to the END of
  544. the ^APTH line, AFTER the address of the system processing the message.  In
  545. any event, it's up to the software author to implement this feature in such a
  546. manner that duplicates will not be created.
  547.  
  548. Similarly, if a node RECEIVES a message containing a ^APTH line that lists
  549. nodes with trailing modifier characters, it is permissible to remove those
  550. nodes from the ^APTH line if it can be positively ascertained that they are no
  551. longer required.  Generally speaking, this should NOT be done unless there is
  552. absolutely NO possibility of the message being exported to one of the nodes in
  553. question.  Note that in most situations, if a ^APTH line contains a node with
  554. a trailing modifier character, but it is followed by a node number (other than
  555. your own) that does NOT have a trailing modifier character (that is, the node
  556. with the trailing modifier character is not one of the last nodes on the
  557. line), then it can usually be safely removed since it will have already
  558. "passed through" the fully-coupled topology.
  559.  
  560. Using the previous example of 157/200, 154/9, and 154/970 participating in a
  561. fully-coupled topology, the ^APTH line as received at 154/9 and 154/970 might
  562. end as follows:
  563.  
  564.      ..... 157/200 154/9! 970!
  565.  
  566. However, please note that if 157/200 also feeds other nodes that are NOT part
  567. of this particular fully coupled topology, there is no real reason they would
  568. have to see the "154/9! 970!" at the end of the line.  However, there is no
  569. prohibition against including those nodes in the ^APTH lines of messages
  570. exported to other nodes.
  571.  
  572. Once this example message arrives at 154/9, the ^APTH line would be changed to
  573. look like this:
  574.  
  575.      ..... 157/200 154/970! 9
  576.  
  577. Now, when this message is exported from 154/9 to another node (154/111 for
  578. example), that node may remove the "154/970!" as long as 154/9 remains in the
  579. ^APTH line, since as long as the message cannot be sent back to 154/9, it
  580. cannot re-enter the fully-coupled topology.  The ^APTH line at this point
  581. (after the message is received on 154/111) might look like this:
  582.  
  583.      ..... 157/200 154/9 111
  584.  
  585. It would probably not be advisable to remove the "154/970!" at 154/9 in this
  586. example, even if the message has already been exported, because the message
  587. might need to be re-exported (such as when a new board picks up an echo feed).
  588.  
  589. When in doubt, nodes with trailing modifier characters (other than your own)
  590. should be left in the ^APTH line.  While there is a cost of a few extra bytes
  591. per message if you leave them in, it does not compare to the cost of the
  592. duplicate messages that could be generated if they are removed
  593. indiscriminately.
  594.  
  595.  
  596. Note 5:  Messages sent to/from non-Fidonet-technology networks:  When a
  597. message originates in, or is sent to, a non-Fidonet-technology network (a
  598. network that does not use the Zone:Net/Node.Point addressing format), it is
  599. permissible to indicate this in the ^APTH line by using the syntax "@Domain"
  600. standing alone.  For example, a message that comes into Fidonet via a gateway
  601. from the Internet might show a ^APTH line as follows:
  602.  
  603.      ^APTH: @Internet 1:114/15@Fidonet 5 ...
  604.  
  605. Note that in the above example, the first Fidonet-technology address must
  606. still contain, at a minimum, Zone, Net, Node, and Domain information.
  607.  
  608. It's also permissible to show a non-Fidonet-technology network at some point
  609. in the ^APTH line other than at the beginning, if for some odd reason a
  610. conference starts out in a Fidonet-technology network, passes through a
  611. non-Fidonet-technology network, and then is picked up by another
  612. Fidonet-technology network.  For example,
  613.  
  614.      ^APTH: [Fidonet addresses] ..... 114/5 15 @Internet 200:5000/400@Metronet
  615.  
  616. Note that "@Internet" stands alone in the above example, meaning that the
  617. conference originated in Fidonet, passed into the Internet (where the ^APTH
  618. line was not maintained), and then back into a Fidonet-technology network
  619. (Metronet in this case).  Note that any Fidonet-technology address that
  620. follows a standalone Domain specifier must contain, at a minimum, Zone, Net,
  621. Node, and Domain information.
  622.  
  623. The question immediately arises, how do you maintain the original
  624. Fidonet-technology ^APTH line while the message passes through another
  625. (non-Fidonet-technology) network?  This could be left solely to the discretion
  626. of the designers of the gateway software, but in order to maintain a standard
  627. that can be followed by authors of different gateway software packages, I
  628. suggest that the ^APTH line be converted to one or more lines that start with
  629. the keyword FtnPth (For "Fidonet-technology ^APTH line), with the @Domain
  630. address of the non-Fidonet-technology network to which the message is being
  631. passed inserted as the last entry in the list.  For example, the following
  632. ^APTH line
  633.  
  634.      ^APTH: 3:711/431.5@Fidonet 431 403 1:124/4210 4115 114/5 15
  635.  
  636. ... would be converted to the following ASCII text line in the message as sent
  637. to the Internet:
  638.  
  639.      FtnPth: 3:711/431.5@Fidonet 431 403 1:124/4210 4115 114/5 15 @Internet
  640.  
  641. If the receiving network has a line length limitation, then it may be
  642. necessary to break the ^APTH line into multiple FtnPth lines.
  643.  
  644. If the message is later passed back into a Fidonet-technology network, the
  645. gateway software should ideally be able to take the FtnPth information and
  646. convert it back to proper ^APTH line syntax, adding the name of the network
  647. that the message was received from if not the same as the last network
  648. indicated in the FtnPth line(s).  Of course, if no FtnPth lines exist in
  649. message, then the gateway software should ideally create one, showing the
  650. network that the message was received from as the first entry in the ^APTH
  651. line.
  652.  
  653. If this is done correctly (and if non-Fidonet-technology networks can be
  654. persuaded to leave the FtnPth lines intact), duplicate message detection can
  655. be maintained even if a message passes through a non-Fidonet network.  In
  656. addition, those in the other network will have access to information showing
  657. where the message originated, which systems it passed through, and where it
  658. entered their network, which can be a big help in tracking problem messages.
  659. Finally, this information can be used to prevent undesirable message paths
  660. (for example, a message that enters Fidonet from a non-Fidonet-technology
  661. network and then is later sent back into that same network at a different
  662. gateway point, thus causing a potential duplicate message in the other
  663. network).
  664.  
  665. Please note that in the above examples, references to @Internet are for
  666. example purposes only, and are not intended to specify the "correct" domain
  667. name (in preference to "UseNet" or "UUCP", for example).  Determination of the
  668. "correct" domain name for non-Fidonet-technology networks may be left to those
  669. who operate the domain gateways.
  670.  
  671. Jack Decker
  672. October 7, 1990
  673.  
  674. Change History:
  675.  
  676. Version 001: 04/01/90 - Original document
  677. Version 002: 10/07/90 - Added support for Domains, and other minor
  678.              modifications to the text (mostly error correction).
  679.  
  680.